#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int dep;
int qp[10][10];
int fx[]={0,0,1,-1};
int fy[]={1,-1,0,0};
int ans=0xffffffff;
bool check(){
    for(int i=1;i<=4;i++){
        if((qp[i][1]==qp[i][2]&&qp[i][2]==qp[i][3]&&qp[i][3]==qp[i][4])||(qp[1][i]==qp[2][i]&&qp[2][i]==qp[3][i]&&qp[3][i]==qp[4][i]))return 1;
    }
    if(qp[1][1]==qp[2][2]&&qp[2][2]==qp[3][3]&&qp[3][3]==qp[4][4])return 1;
    if(qp[4][1]==qp[3][2]&&qp[3][2]==qp[2][3]&&qp[2][3]==qp[1][4])return 1;
    return 0;
}
void dfs(int g,int qz){
    if(g==dep){
        if(check()){
            cout<<g;
            exit(0);
        }
        return;
    }
    for(int i=1;i<=4;i++){
        for(int j=1;j<=4;j++){
            if(qp[i][j]==2){
                for(int k=0;k<4;k++){
                    int x=fx[k]+i;
                    int y=fy[k]+j;
                    if(x>4||x<1||y>4||y<1)continue;
                    if(qp[x][y]==qz){
                        swap(qp[i][j],qp[x][y]);
                        dfs(g+1,!qz);
                        swap(qp[i][j],qp[x][y]);
                    }
                }
            }
        }
    }
}

int main(){
    for(int i=1;i<=4;i++){
        for(int j=1;j<=4;j++){
            char g;
            cin>>g;
            if(g=='W')qp[i][j]=1;
            if(g=='B')qp[i][j]=0;
            if(g=='O')qp[i][j]=2; 
        }
    }
    for(dep=0;dep<=0xffffffff;dep++){
        dfs(0,1);
        dfs(0,0);
    }
    return 0;
}